

from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response

# 自定义分页器: 只针对序列化返回的逻辑，不在乎模型类是什么！
# 是一个通用的分页器，可以作用于不同的模型类的序列化返回操作
class MyPage(PageNumberPagination):
    page_query_param = "page"
    page_size_query_param = "pagesize"
    max_page_size = 10
    page_size = 10

    # 重写分页器用于构建响应结果的一函数
    def get_paginated_response(self, data):
        """
        功能构建分页返回结果
        :param data: 分页子集序列化结果
        :return: 响应对象
        """
        return Response(data={
            # 自定义响应数据
            'counts': self.page.paginator.count, # 总数量
            'lists': data, # 分页子集序列化结果
            'page': self.page.number, # 当前页数
            'pages': self.page.paginator.num_pages, # 总页数
            'pagesize': self.page_size
        })